Distributed computing includes the use of computing resources (hardware and software) that are delivered as a service over a network (typically the Internet), often referred to as “cloud computing.” In a distributed computing environment, a customer pays a “cloud provider” to obtain control of a virtual machine, which may be implemented as a program executing on computer hardware owned and/or controlled by the cloud provider. It is common for cloud providers to make virtual machines hosted on its computer hardware available to customers for this purpose. The cloud provider typically provides an interface that a customer can use to requisition virtual machines and associated resources such as processors, memory, storage, and network services, etc., as well as an interface a customer can use to install and execute the customer's program on the virtual machines that the customer requisitions, together with additional software on which the customer's program depends.
The interface provided by the cloud provider communicates with a virtualization manager that manages the computer hardware that provides the virtual environments used by end users of the virtual machines. The virtualization manager, via built-in and hard-coded algorithms, determines where to launch a virtual machine requested by the customer. However, cloud providers (who may be customers of virtualization management solutions) typically have little input regarding the algorithms that determine where a virtual machine is provisioned. If a cloud provider administrator wants to modify the algorithms that determine where to provision a virtual machine, code changes of the virtualization manager is typically performed.